package com.tongda.menu.adapter;

import java.util.ArrayList;

import com.tongda.core.repository.MenuDishDao;

import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.text.Html;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

public class AutoTextAdapater extends BaseAdapter implements  Filterable {

	String[] strs;

	Context conx;

	MyFilter myFilter;

	MenuDishDao dishdao;
	/**
	 * 输入框中当前的关键字
	 */
	String tempKeyString;

	public AutoTextAdapater(String[] strs, Context conx, MenuDishDao dishdao) {
		super();
		this.strs = strs;
		this.conx = conx;
		this.dishdao = dishdao;
	}

	@Override
	public Filter getFilter() {
		// 自定义的拦截器，对包含的关键字进行处理
		if (null == myFilter) {
			myFilter = new MyFilter();
		}
		return myFilter;
	}

	@Override
	public int getCount() {
		return strs.length;
	}

	@Override
	public Object getItem(int position) {
		return strs[position];
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public int getItemViewType(int position) {
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		Log.i("---position---", "" + position);
		TextView tx = new TextView(conx);
		tx.setTextSize(18);
		tx.setHeight(60);
		tx.setGravity(Gravity.CENTER_VERTICAL);
		tx.setTextColor(Color.BLACK);
		String temp1 = strs[position];

		// 使用网页来显示字体
		if(temp1.contains(tempKeyString)){
			tx.setText(Html.fromHtml(temp1.substring(0,
					temp1.indexOf(tempKeyString))
					+ "<font color= 'red' type='bold'>"
					+ tempKeyString
					+ "</font>"
					+ temp1.substring(
							temp1.indexOf(tempKeyString) + tempKeyString.length(),
							temp1.length())));
		}else{
			tx.setText(temp1);
		}

		 
		return tx;
	}

	/**
	 * 注意不能填写0
	 */
	@Override
	public int getViewTypeCount() {
		return 1;
	}

	@Override
	public boolean hasStableIds() {
		return false;
	}

	@Override
	public boolean isEmpty() {
		return true;
	}

	@Override
	public void registerDataSetObserver(DataSetObserver observer) {

	}

	@Override
	public void unregisterDataSetObserver(DataSetObserver observer) {
	}

	@Override
	public boolean areAllItemsEnabled() {
		return true;
	}

	@Override
	public boolean isEnabled(int position) {
		return true;
	}

	/**
	 * Filter就是一个拦截器和过滤器，（就是给自动完成文本框的一个拦截器）我们在使用自动完成文本框的时候
	 * 
	 * @author pqp66011
	 */
	class MyFilter extends Filter {
		String[] strsContains;

		public MyFilter() {
			super();
		    strsContains = strs;
		}

		/**
		 * 在这个方法里执行过滤方法
		 */
		@Override
		protected FilterResults performFiltering(CharSequence constraint) {
			Log.i(" constraint ", "constraint == " + constraint);
			// filterREsults是filter的一个结果对象，里面只包括两个成员属性，Object 和 count
			FilterResults result = new FilterResults();

			// 定义一个集合来保存数组中存在的关键字的字符串
			ArrayList<String> strsTemp = new ArrayList<String>();

			// 在这里可以获取autoCompeted中输入的信息
			// 把字符串中包含这个关键字的item返回给adapter.
			if (null != constraint && constraint.length() > 0) {
				
				for (int i = 0; i < strsContains.length; i++) {
					String tempstr = strsContains[i];
					// 同一做大小写的处理
					if (tempstr.toLowerCase().contains(
							constraint.toString().toLowerCase()))// 包含关键字的添加进去
					{
						strsTemp.add(tempstr);
					}
				}
				
				if(strsTemp.size()==0){
					strsTemp = (ArrayList<String>) dishdao.searchBySearchCodes2(constraint.toString());
				}
				
				result.values = strsTemp;
				result.count = strsTemp.size();
			}

			// 这个结果集 将会返回给 publishResults 方法中的 FilterResults results这个参数
			// 所以我们在下面获取
			return result;
		}

		/**
		 * 在这个方法里发布筛选过后得到的数据同时更新Adapter更新
		 */
		@SuppressWarnings("unchecked")
		@Override
		protected void publishResults(CharSequence constraint,
				FilterResults results) {
			ArrayList<String> tempList = (ArrayList<String>) results.values;
			if (null != tempList) {
				String[] strsTemps = new String[tempList.size()];
				for (int i = 0; i < tempList.size(); i++) {
					strsTemps[i] = tempList.get(i);
				}
				strs = strsTemps;

				// 这个时候输入的关键字
				tempKeyString = constraint.toString();
				
				
			}

		}

	}

}